#include <stdio.h>
#include <string.h>
#include <error.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <uuid/uuid.h>
#include <time.h>

#include "file.h"

void readFile(MYSQL *mysqlSt)
{
    char buf[2000] = {0};
    int ret = -1;
    
    // 第一步：打开文件
    FILE *fp=fopen("LICENSE","r");
    if (fp==NULL)        // 有时候也写成： (fd < 0)
    {
        perror("open");
    }
    else
    {
        printf("文件打开成功，fd = %d.\n", fp);
    }

    int count =0;
    while(!feof(fp))  
    {  
        count++;

        fgets(buf,2000,fp);  

        char tmpBuf[2000]={0};
        // sprintf(tmpBuf,"%d:%s",count,buf);
        // printf("size:%d\n",strlen(buf));
        // printf("buf:%s\n",tmpBuf);

        parserStr(mysqlSt,buf,sizeof(buf)/sizeof(char));

        memset(buf,0,2000);
    }  

    // 第三步：关闭文件
    close(fp);
}

void parserStr(MYSQL *mysqlSt,char *buf,int len)
{
    if(buf==NULL||
        buf==" "||
        buf=="\n")
        return;

    char *charArray[1000]={0};

    char *tmpChar=strtok(buf," ");
    int count=0;
    while(tmpChar)
    {
        charArray[count]=tmpChar;
        count++;

        tmpChar=strtok(NULL," ");
    }

    insert(mysqlSt,charArray);

#if 0
    int i=0;
    for(i=0;i<1000;i++)
    {
        if(charArray[i]==0)
            return;

        printf("parser:%s\n",charArray[i]);
        charArray[i]=0;
    }
#endif

}

void insert(MYSQL *mysqlSt,char **charArray)
{
   int i=0;
    for(i=0;i<1000;i++)
    {
        if(charArray[i]==0)
            return;
        //check
        char *restStr=strpbrk(charArray[i],"\' ");
        if(restStr!=NULL)
            return;

        char uuidStr[36]={0};

        getUUid(uuidStr);
        printf("getUUid:%s\n",uuidStr);
        
        char timeStr[30]={0};
        getTime(timeStr);
        printf("getTime:%s\n",timeStr);

    // snprintf(buf,sizeof(buf),
    //         "create table %s (id varchar(36) not null,\
    //         word varchar(20),\
    //         datetime datetime,\
    //         time varchar(30));",table_name);
    //         
        char queryStr[100]={0};
        sprintf(queryStr,"insert into words values('%s','%s','','%s');",
            uuidStr,charArray[i],timeStr);

        printf("insert line:%s\n",queryStr);

        if(0!=mysql_query(mysqlSt,queryStr))
        {
            printf("insert into table failed.\n");
            mysql_error(mysqlSt);
            return;
        }
        else
        {
            int rows=mysql_affected_rows(mysqlSt);
            printf("affected rows:%d\n",rows);
        }

    } 
}

void getUUid(char *uuidStr)
{
    uuid_t uuid;
    char str[36];
 
    uuid_generate(uuid);
    uuid_unparse(uuid, str);
 
    // printf("%s\n", str);

    // uuidStr=str;
    strcpy(uuidStr,str);
}

void getTime(char *buff)
{
    time_t now;         //time_t实际为长整形  
    struct tm  *w;          //tm结构体结构化存放时间  
  
    time(&now);  
    w=localtime(&now);      //获取当前系统时间  
//ms
    time_t timep;
    time (&timep);

    struct timeval tv;
    gettimeofday(&tv,NULL);
      
    // printf("%04d/%02d/%02d %02d:%02d:%02d %03d\n",
    //             w->tm_year+1900,  
    //             w->tm_mon+1,w->tm_mday,w->tm_hour,
    //             w->tm_min,w->tm_sec,
    //             tv.tv_usec/1000);  

    char timeStr[30]={0};
    sprintf(timeStr,"%04d/%02d/%02d %02d:%02d:%02d %03d",
        w->tm_year+1900,w->tm_mon+1,w->tm_mday,
        w->tm_hour,w->tm_min,w->tm_sec,
        tv.tv_usec/1000);
    // printf("sss:%s\n",timeStr);
    memcpy(buff,timeStr,30);

}


#if 0
void parser(char *buf,int len);

int main(int argc, char *argv[])
{
    char buf[2000] = {0};
    int ret = -1;
    
    // 第一步：打开文件
    FILE *fp=fopen("LICENSE","r");
    if (fp==NULL)        // 有时候也写成： (fd < 0)
    {
        perror("open");
    }
    else
    {
        printf("文件打开成功，fd = %d.\n", fp);
    }

    int count =0;
    while(!feof(fp))  
    {  
        count++;

        fgets(buf,2000,fp);  

        char tmpBuf[2000]={0};
        sprintf(tmpBuf,"%d:%s",count,buf);
        // printf("size:%d\n",strlen(buf));
        printf("buf:%s\n",tmpBuf);

        parser(tmpBuf,sizeof(tmpBuf)/sizeof(char));

        memset(buf,0,2000);
    }  

    // 第三步：关闭文件
    close(fp);
    
    return 0;
}
#endif
